﻿/*
7-30 字符串的冒泡排序 (20 分)
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列，并对任意给定的K（<N），输出扫描完第K遍后的中间结果序列。

输入格式：
输入在第1行中给出N和K（1≤K<N≤100），此后N行，每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式：
输出冒泡排序法扫描完第K遍后的中间结果序列，每行包含一个字符串。

输入样例：
6 2
best
cat
east
a
free
day
输出样例：
best
a
cat
day
east
free
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void read_line(char* a) {
	int n = 0;
	int readding = 1;
	char c;
	while (readding && scanf("%c",&c) != EOF) {
		switch (c) {
		case '\r':
		case '\n':
			readding = 0;
			break;
		default:
			a[n++] = c;
		}
	}
	a[n] = 0;
}

static void swap(char** a, char** b) {
	char* temp = *a;
	*a = *b;
	*b = temp;
}

static void bubble_scan(int n, char** datas) {
	for (int i = 1; i < n; i++, datas++) {
		if (strcmp(datas[0] , datas[1])>0)
			swap(datas, datas + 1);
	}
}

static void bubble(int n, int k, char** datas) {
	int i = 0;
	for (i = 0; i < k; i++)
		bubble_scan(n, datas);
	for (i = 0; i < n; i++)
		printf("%s\n", datas[i]);
}


char names[101][11] = {};
char *buffer[101] = {};

int main() {
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/zju_C_Basic/data/7.30.txt", "r", stdin);
	int n, k, i;
	scanf("%d %d\n", &n, &k);
	for (int i = 0; i < n; i++) {
		read_line(names[i]);
		buffer[i] = names[i];
	}
	bubble(n, k, buffer);
	return 0;
}